package cn.mumzone.pos.util.print;

import android.text.TextUtils;

import java.io.UnsupportedEncodingException;
import java.util.List;

import cn.mumzone.basic.util.BigDecimalUtil;

/**
 * Created by lijiateng on 2018/10/25.
 * 按字节截取字符串
 * <p>
 * 有的时候商品名称比较长，一行是放不下的，这个时候你就需要对商品名称切割成若干行。
 * 但是切割的时候又会有个问题，商品信息里面有汉字，有字母，还会有数字和特殊符号，如果切割不好，很有可能会切出乱码来。
 * 一般一个汉字占2个字节，一个英文字母是占1个字节；
 * 平常在占位上一个汉字是占2个英文字母的位置，平常开发的时候我们一般是以UTF-8格式的，如果想计算好宽度又需要将其转为gbk 或 gb2312
 */

public class SubByteString {

    public static String subStr(String str, int subSLength) throws UnsupportedEncodingException {
        if (str == null)
            return "";
        else {
            int tempSubLength = subSLength;//截取字节数
            String subStr = str.substring(0, str.length() < subSLength ? str.length() : subSLength);//截取的子串
            int subStrByetsL = subStr.getBytes("GBK").length;//截取子串的字节长度
            //int subStrByetsL = subStr.getBytes().length;//截取子串的字节长度
            // 说明截取的字符串中包含有汉字
            while (subStrByetsL > tempSubLength) {
                int subSLengthTemp = --subSLength;
                subStr = str.substring(0, subSLengthTemp > str.length() ? str.length() : subSLengthTemp);
                subStrByetsL = subStr.getBytes("GBK").length;
                //subStrByetsL = subStr.getBytes().length;
            }
            return subStr;
        }
    }

    public static String[] getSubStrings(String string, int unitLength) {
        if (TextUtils.isEmpty(string)) {
            return null;
        }

        String src = string.replaceAll("\\s+", "");

        int arraySize = 0;
        try {
            arraySize = (int) Math.ceil(BigDecimalUtil.div(String.valueOf(src.getBytes("GBK").length),String.valueOf(unitLength)));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

//        if (src.getBytes().length % unitLength > 0) {
//            arraySize++;
//        }
//
//        String[] result = new String[arraySize];
//
//        for (int i = 0; i < arraySize; i++) {
//            try {
//                result[i] = subStr(src, unitLength);
//            } catch (UnsupportedEncodingException e) {
//                e.printStackTrace();
//            }
//            src = src.replace(result[i], "");
////            LogUtils.d(">>>>>>  " + result[i]);
//        }

        String[] result = new String[arraySize];
        try {
            int arrayIndex = 0;
            int startIndex = 0;    //字符串截取起始位置
            int endIndex = unitLength > src.length() ? src.length() : unitLength;  //字符串截取结束位置
            while (startIndex < src.length()) {
                String subString = src.substring(startIndex, endIndex);
                //截取的字符串的字节长度大于需要截取的长度时，说明包含中文字符
                //在GBK编码中，一个中文字符占2个字节，UTF-8编码格式，一个中文字符占3个字节。
                while (subString.getBytes("GBK").length > unitLength) {
                    --endIndex;
                    subString = src.substring(startIndex, endIndex);
                }
                result[arrayIndex] = src.substring(startIndex, endIndex);
                arrayIndex++;
                startIndex = endIndex;
                //判断结束位置时要与字符串长度比较(src.length())，之前与字符串的bytes长度比较了，导致越界异常。
                endIndex = (startIndex + unitLength) > src.length() ?
                        src.length() : startIndex + unitLength;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 去处字符串中间的空格
     *
     * @param string
     * @return
     */
    private static String trimEntireString(String string) {
        string.replace(" ", "");
        return null;
    }
}